fn main() {
    println!("Hello, world!");
    let nil = Nil;
    let copied_nil = nil;

    println!("original:{:?}", nil);
    println!("copy:{:?}", copied_nil);

    // 实例化Pair
    let pair = Pair(Box::new(1), Box::new(2));
    println!("original:{:?}", pair);
    let moved_pair = pair;
    println!("copy {:?}", moved_pair);

    let cloned_pair = moved_pair.clone();
    // 默认是move行为不是copy，传给drop就被move了，
    drop(moved_pair);
    // 这行报错，因为值已被移动（moved）了,移动钱clone一份可以解决问题
    println!("copy:{:?}", moved_pair);
    println!("clone:{:?}", cloned_pair);
}

#[derive(Debug, Copy, Clone)]
struct Nil;

#[derive(Debug, Clone)]
struct Pair(Box<i32>, Box<i32>);
